/**
 * 存储接口定义
 * 简化版本，专注于内容分发平台的核心需求
 */

/**
 * 文件上传结果
 */
export interface IUploadResult {
  /** 文件标识 */
  id: string;
  /** 文件访问 URL */
  url: string;
  /** 文件名称 */
  filename: string;
  /** 文件大小（字节） */
  size: number;
  /** MIME 类型 */
  mimeType: string;
  /** 上传时间 */
  uploadedAt: Date;
  /** 图片尺寸信息（仅图片文件） */
  dimensions?: {
    width: number;
    height: number;
  };
}

/**
 * 上传选项
 */
export interface IUploadOptions {
  /** 自定义文件名 */
  filename?: string;
  /** 图片质量 (0-100) */
  quality?: number;
  /** 最大宽度 */
  maxWidth?: number;
  /** 最大高度 */
  maxHeight?: number;
}

/**
 * 存储适配器配置
 */
export interface IStorageConfig {
  /** 适配器类型 */
  type?: 'browser' | 'oss';
  /** OSS 配置 */
  oss?: {
    accessKeyId: string;
    accessKeySecret: string;
    bucket: string;
    region: string;
    endpoint?: string;
  };
  /** 浏览器存储配置 */
  browser?: {
    dbName?: string;
    maxSize?: number; // 最大存储大小（字节）
  };
}

/**
 * 存储适配器接口
 * 简化版本，只包含核心功能
 */
export interface IStorageAdapter {
  /** 适配器名称 */
  readonly name: string;
  /** 是否已初始化 */
  readonly initialized: boolean;

  /**
   * 初始化存储适配器
   */
  initialize(config?: IStorageConfig): Promise<void>;

  /**
   * 上传文件
   * @param file 要上传的文件
   * @param options 上传选项
   */
  upload(file: File | Blob | Buffer, options?: IUploadOptions): Promise<IUploadResult>;

  /**
   * 删除文件
   * @param id 文件标识
   */
  delete(id: string): Promise<void>;

  /**
   * 检查文件是否存在
   * @param id 文件标识
   */
  exists(id: string): Promise<boolean>;

  /**
   * 获取文件信息
   * @param id 文件标识
   */
  getInfo(id: string): Promise<IUploadResult>;

  /**
   * 销毁适配器
   */
  destroy(): Promise<void>;
}
